Manejo y visualización de datos Observatorio de Conflictos - COES
1 Introducción
El siguiente documento tiene por objetivo aportar en el manejo, operacionalización y visualización de variables de la base de datos del Observatorio de Conflictos del Centro de Estudios de Conflicto y Cohesion Social (COES), en la cual se registra información sobre acciones de protesta en Chile durante los años 2009-2019. Para estos fines se utilizan un conjunto de paquetes y comandos mínimos que permiten el manejo y análisis visual de los datos. Este documento se divide en dos grandes apartados: uno sobre Manejo y operacionalización de datos, y otro sobre Visualización de datos con ggplot2.
2 Operacionalización y manejo de datos
2.1 Librerías principales a utilizar
En esta sección comenzaremos cargando las librerías que nos servirán para la recodificación y creación de nuevas variables. Se recomienda el uso del paquete pacman para instalar y cargar librerías de forma más eficiente y actualizada. De todas maneras se incluye la opción para hacerlo sin pacman.
2.1.1 Con pacman
# Ajustar espacio de trabajo
rm(list=ls())
options(scipen=9999) # desactivar notacion cientifica
# Cargar librerías
if (!require("pacman")) install.packages("pacman") # Pacman para instalar y cargar librerías
pacman::p_load(car,
tidyverse,
sjlabelled,
lubridate,
ggplot2,
sjmisc,
summarytools,
sjPlot,
RColorBrewer,
gridExtra,
plotly)2.1.2 Sin pacman
# Ajustar espacio de trabajo
rm(list=ls())
options(scipen=9999) # desactivar notacion cientifica
# Cargar librerías
library(car)
library(tidyverse)
library(sjlabelled)
library(lubridate)
library(ggplot2)
library(sjmisc)
library(summarytools)
library(sjPlot)
library(RColorBrewer)
library(gridExtra)
library(plotly)2.2 Cargar datos desde repositorio Dataverse
Cargamos la base de datos del Observatorio de Conflictos 2009-2019 disponible en el Dataverse de Harvard. La unidad de análisis de la base de datos son las acciones contenciosas, las cuales se definen como: como la forma en la que un actor, grupo o movimiento social expresa un malestar colectivo, pacífica u hostilmente, frente a otro actor, grupo, movimiento, o instancia pública o privada, a través del despliegue de ciertas tácticas en el espacio público.
# Cargar datos desde Dataverse
load(url("https://dataverse.harvard.edu/api/access/datafile/4880232"))2.3 Selección y etiquetado de variables
Para el desarrollo de este documento utilizaremos las siguientes variables:
pb: Radios nacionalesp5c: Añop6: Regiónp13a-d: Grupos socialesp19a1-e1: Demandasp21: Presencia policialP25: Presencia de heridosp27: Presencia de muertosp29a-f: Tácticas
Las variables p13a-d, p19a1-e1 y p29a-f son variables que contienen columnas múltiples, por ejemplo, en el caso de las tácticas puede suceder que exista una marcha, luego una barricada y finalmente enfrentamientos con carabineros, por lo que se hace necesario tener una serie de columnas que permita dar cuenta de esas diferencias. Asimismo, esta característica aplica para el caso de los grupos sociales y las demandas que también contienen más de una columna.
Otro caso relevante es la variable pb que permite filtrar las radios nacionales (Radio Biobío - Radio Cooperativa), ya que la base de datos 2009-2019 no cuenta con información de estas radios para los años 2009-2011. Es relevante sacar estos medios para realizar el análisis para el total de años y para eliminar sesgos temporales asociados a la falta de información.
# Selección de variables
proc_data <- acciones_de_protesta_2009_2019 %>%
dplyr::select(pb, p5c, p6, p13a, p13b, p13c, p13d, p19a1, p19b1,
p19c1, p19d1, p19e1, p21, p25, p27, p29a, p29b, p29c, p29d, p29e, p29f)
rm(acciones_de_protesta_2009_2019) # removemos base original## Región
proc_data$region <- factor(proc_data$p6,labels = c('Tarapacá', 'Antofagasta', 'Atacama','Coquimbo','Valparaíso','O´Higgins','Maule','Biobío','Araucanía','Los Lagos','Aysén','Magallanes','Metropolitana','Los Ríos','Arica y Parinacota','Ñuble'))
## Macrozonas
proc_data <- proc_data %>% mutate(macrozona = case_when(p6 %in% c(15, 1:4) ~ "Norte",
p6 %in% c(5:7, 16) ~ "Centro",
p6 %in% c(13) ~ "RM",
p6 %in% c(8:12, 14) ~ "Sur"))
## Años
proc_data$ano <- car::recode(proc_data$p5c, recodes = c("9 = 2009; 10 = 2010; 11 = 2011;
12 =2012; 13 = 2013; 14 = 2014; 15 = 2015;
16 = 2016; 17 = 2017; 18 = 2018; 19 = 2019"), as.numeric = T)
# Etiquetas
proc_data$region <- sjlabelled::set_label(proc_data$region, label = c('Regiones'))
proc_data$macrozona <- sjlabelled::set_label(proc_data$macrozona, label = c('Macrozonas'))
proc_data$ano <- sjlabelled::set_label(proc_data$ano, label = c('Año'))2.4 Operacionalización de variables
De acuerdo con las indicaciones del libro de códigos del Observatorio de Conflictos, se recomienda agrupar las distintas demandas, repertorios de protesta o grupos sociales participantes por categorías específicas. Esto resulta especialmente útil para describir el comportamiento por región o el desarrollo en el tiempo de algunas demandas, ciertas tácticas de protesta y la participación de determinados grupos sociales. Para ello, generaremos una serie de variables dicotómicas a partir de las categorías descritas en el libro de códigos.
2.4.1 Demandas
# Educación
proc_data <- proc_data %>%
mutate(educacion = case_when(p19a1 >=100 & p19a1 < 200 ~ "1",
p19b1 >=100 & p19b1 < 200 ~ "1",
p19c1 >=100 & p19c1 < 200 ~ "1",
p19d1 >=100 & p19d1 < 200 ~ "1",
p19e1 >=100 & p19e1 < 200~ "1",
TRUE ~ "0"))
# Etiqueta
proc_data$educacion <- factor(proc_data$educacion,labels = c('No', 'Sí'))
proc_data$educacion <- sjlabelled::set_label(proc_data$educacion, label = c('Demanda - Educacional'))# Indigena
proc_data <- proc_data %>%
mutate(indigena = case_when(p19a1 >=200 & p19a1 < 300 ~ "1",
p19b1 >=200 & p19b1 < 300 ~ "1",
p19c1 >=200 & p19c1 < 300 ~ "1",
p19d1 >=200 & p19d1 < 300 ~ "1",
p19e1 >=200 & p19e1 < 300~ "1",
TRUE ~ "0"))
# Etiqueta
proc_data$indigena <- factor(proc_data$indigena,labels = c('No', 'Sí'))
proc_data$indigena <- sjlabelled::set_label(proc_data$indigena, label = c('Demanda - Indígenas'))# Laboral
proc_data <- proc_data %>%
mutate(laboral = case_when(p19a1 >=300 & p19a1 < 400 ~ "1",
p19b1 >=300 & p19b1 < 400 ~ "1",
p19c1 >=300 & p19c1 < 400 ~ "1",
p19d1 >=300 & p19d1 < 400 ~ "1",
p19e1 >=300 & p19e1 < 400~ "1",
TRUE ~ "0"))
# Etiqueta
proc_data$laboral <- factor(proc_data$laboral,labels = c('No', 'Sí'))
proc_data$laboral <- sjlabelled::set_label(proc_data$laboral, label = c('Demanda - Laborales'))# Salud
proc_data <- proc_data %>%
mutate(salud = case_when(p19a1 >=600 & p19a1 < 700 ~ "1",
p19b1 >=600 & p19b1 < 700 ~ "1",
p19c1 >=600 & p19c1 < 700 ~ "1",
p19d1 >=600 & p19d1 < 700 ~ "1",
p19e1 >=600 & p19e1 < 700~ "1",
TRUE ~ "0"))
# Etiqueta
proc_data$salud <- factor(proc_data$salud,labels = c('No', 'Sí'))
proc_data$salud <- sjlabelled::set_label(proc_data$salud, label = c('Demanda - Salud'))2.4.2 Repertorios de protesta
# Protesta pacífica
proc_data <- proc_data %>%
mutate(pacifica = case_when(p29a >=1 & p29a <= 17 ~ "1",
p29b >=1 & p29b <= 17 ~ "1",
p29c >=1 & p29c <= 17 ~ "1",
p29d >=1 & p29d <= 17 ~ "1",
p29e >=1 & p29e <= 17 ~ "1",
p29f >=1 & p29f <=17 ~ "1",
TRUE ~ "0"))
# Etiqueta
proc_data$pacifica <- factor(proc_data$pacifica,labels = c('No', 'Sí'))
proc_data$pacifica <- sjlabelled::set_label(proc_data$pacifica, label = c('Táctica - Pacífica'))# Protesta disruptiva
proc_data <- proc_data %>%
mutate(disruptiva = case_when(p29a >=18 & p29a <=24 ~ "1",
p29b >=18 & p29b <= 24 ~ "1",
p29c >=18 & p29c <=24 ~ "1",
p29d >=18 & p29d <= 24 ~ "1",
p29e >=18 & p29e <= 24 ~ "1",
p29f >=18 & p29f <=24 ~ "1",
TRUE ~ "0"), label = "Protesta disruptiva")
# Etiqueta
proc_data$disruptiva <- factor(proc_data$disruptiva,labels = c('No', 'Sí'))
proc_data$disruptiva <- sjlabelled::set_label(proc_data$disruptiva, label = c('Táctica - Disruptiva'))# Protesta violenta
proc_data <- proc_data %>%
mutate(violenta = case_when(p29a >=25 & p29a <=36 ~ "1",
p29b >=25 & p29b <= 36 ~ "1",
p29c >=25 & p29c <=36 ~ "1",
p29d >=25 & p29d <= 36 ~ "1",
p29e >=25 & p29e <= 36 ~ "1",
p29f >=25 & p29f <=36 ~ "1",
TRUE ~ "0"), label = "Protesta violenta")
# Etiqueta
proc_data$violenta <- factor(proc_data$violenta,labels = c('No', 'Sí'))
proc_data$violenta <- sjlabelled::set_label(proc_data$violenta, label = c('Táctica - Violenta'))2.4.4 Existencia de presencia policial, heridos y muertos en la protesta
# Presencia policial
proc_data$policial <- factor(proc_data$p21, labels = c('Sí', 'No'))
proc_data$heridos <- factor(proc_data$p25, labels = c('Sí', 'No'))
proc_data$muertes <- factor(proc_data$p27, labels = c('Sí', 'No'))
# Etiquetas
proc_data$policial <- sjlabelled::set_label(proc_data$policial, label = c('Presencia policial'))
proc_data$heridos <- sjlabelled::set_label(proc_data$heridos, label = c('Presencia heridos'))
proc_data$muertes <- sjlabelled::set_label(proc_data$muertes, label = c('Presencia muertos'))2.5 Filtrado y selección de variables base procesada
Para asegurar la consistencia del análisis en el tiempo es relevante separar (filtrar) las radios nacionales Cooperativa y Biobío. Esto se debe a que la base del Observatorio de Conflictos no cuenta con registros para los años 2009-2011 para estos medios, por lo que se hace necesario filtrar la base de datos en caso de que se quieran realizar análisis que abarquen el total de años. Esto lo realizaremos a partir de la variable pb de la base de datos que permite filtrar dichos medios. Luego, seleccionamos las variables procesadas para la posterior visualización. Por último y opcionalmente, podemos guardar la base de datos procesada.
# Filtramos los casos reportados por los medios presentes entre 2009-2019
proc_data <- proc_data %>% filter(pb == 0)
# Seleccionamos variables para visualización
data <- proc_data%>%
dplyr::select(ano, region, educacion, indigena, laboral, salud, pacifica, disruptiva, violenta, macrozona,
estudiantes, trabajadores, policial, heridos, muertes)
# Guardar (opcional)
# save(data, file = "[ruta carpeta local]/data2009-2019.RData")2.6 Descriptivos preliminares
Para finalizar esta sección y antes de comenzar con la visualización mediante ggplot2, siempre es recomendable realizar una mirada general de la distribución de los datos.
st_css() # Alinear descriptivos dentro de summarytoolsprint(dfSummary(data, varnumbers = F, headings = F, valid.col = F, na.col = F, style = "grid", split.cells = 3), method = "render")| Variable | Label | Stats / Values | Freqs (% of Valid) | Graph | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ano [numeric] | Año | Mean (sd) : 2014.4 (3.3) min < med < max: 2009 < 2014 < 2019 IQR (CV) : 7 (0) | 11 distinct values | |||||||||||||||||||||||||||||||||||||||||||||
| region [factor] | Regiones | 1. Tarapacá 2. Antofagasta 3. Atacama 4. Coquimbo 5. Valparaíso 6. O´Higgins 7. Maule 8. Biobío 9. Araucanía 10. Los Lagos [ 6 others ] |
|
|||||||||||||||||||||||||||||||||||||||||||||
| educacion [factor] | Demanda - Educacional | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| indigena [factor] | Demanda - Indígenas | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| laboral [factor] | Demanda - Laborales | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| salud [factor] | Demanda - Salud | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| pacifica [factor] | Táctica - Pacífica | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| disruptiva [factor] | Táctica - Disruptiva | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| violenta [factor] | Táctica - Violenta | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| macrozona [character] | Macrozonas | 1. Centro 2. Norte 3. RM 4. Sur |
|
|||||||||||||||||||||||||||||||||||||||||||||
| estudiantes [factor] | Grupos social - Estudiantes | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| trabajadores [factor] | Grupos social - Trabajadores | 1. No 2. Sí |
|
|||||||||||||||||||||||||||||||||||||||||||||
| policial [factor] | Presencia policial | 1. Sí 2. No |
|
|||||||||||||||||||||||||||||||||||||||||||||
| heridos [factor] | Presencia heridos | 1. Sí 2. No |
|
|||||||||||||||||||||||||||||||||||||||||||||
| muertes [factor] | Presencia muertos | 1. Sí 2. No |
|
Generated by summarytools 0.9.9 (R version 4.0.3)
2021-11-30
3 Visualización de datos
Una advertencia a considerar es que los gráficos no siempre suman 100 o en algunos casos suman más de 100 debido a que los porcentajes son para el total de cada variable por separado. Precisamente, esto se debe, por ejemplo, a que muchas tácticas dentro de la base del Observatorio ocurren de forma conjunta (una marcha que es pacífica pero que, a su vez, termina con barricadas que son tácticas disruptivas). Para visualizar las diferencias se aíslan las formas de repertorio de protesta y se grafica cada una por separado. Esta característica se repite en la creación de otras variables como demandas y grupos sociales, entre otras que están presentes en los datos.
3.1 Cantidad de acciones contenciosas
Para conocer la frecuencia de acciones contenciosas entre los años 2009-2019 haremos tres gráficos diferentes: uno con las frecuencias totales por año, otro con los porcentajes por año, y uno con los porcentajes por año según las distintas regiones del país.
3.1.1 Frecuencias
g1 <- data %>% mutate(ano = as.factor(data$ano)) %>%
group_by(ano) %>%
summarise(porcentaje = n()) %>%
ggplot(aes(y = porcentaje, x = ano, label = as.character(scales::percent(porcentaje, accuracy = .1))))+
geom_col(fill="#440154FF", position= 'dodge2') +
labs(title = 'Cantidad de acciones contenciosas según año',
y = 'Frecuencia de eventos',
x = 'Año',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
geom_text(aes(label = porcentaje), vjust = -0.8,
position = position_dodge(width = .9),
size= 3)+
theme_bw()+
coord_cartesian(ylim=c(0,5000))+
theme(axis.title = element_text(), text = element_text(size = 12))
g13.1.2 Porcentajes
g2 <- data %>% mutate(ano = as.factor(data$ano)) %>%
group_by(ano) %>%
summarise(porcentaje = n()) %>%
mutate(prop = prop.table(porcentaje)) %>%
ggplot(aes(y = prop, x = ano, label = as.character(scales::percent(prop, accuracy = .1))))+
geom_col(fill="#414487FF", position= 'dodge2') +
labs(title = 'Porcentaje de acciones contenciosas según año',
y = 'Porcentaje de eventos',
x = 'Año',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
geom_text(vjust = -0.8,
position = position_dodge(width = .9),
size= 3)+
scale_y_continuous(labels = scales::percent) +
theme_bw() +
coord_cartesian(ylim=c(0,0.3)) +
theme(axis.title = element_text(), text = element_text(size = 12))
g23.1.3 Región
g3 <- data %>% group_by(region) %>%
summarise(porcentaje = n()) %>%
mutate(prop = prop.table(porcentaje)) %>%
mutate(region = fct_reorder(region, prop)) %>%
ggplot(aes(x = region, y = prop, fill = region, label = scales::percent(prop, accuracy = .1))) +
geom_bar(stat="identity", width=0.8, position = "dodge") +
geom_text(position = position_dodge2(width = .9),
vjust = 0.35,
hjust = -0.8,
size = 3) +
scale_y_continuous(labels=function(x) format(x, big.mark = ".", scientific = FALSE)) +
scale_fill_viridis_d(option = "viridis") +
theme_bw() + coord_flip(ylim =c(0,0.3)) +
labs(title = 'Porcentaje de acciones contenciosas según región',
y = 'Porcentaje de eventos',
x = 'Regiones',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
labs(fill = "Regiones") +
theme(axis.title = element_text(), text = element_text(size = 12))
g33.2 Tácticas por macrozona
Para conocer la cantidad de tácticas pácificas, disruptivas y violentas empleadas en las macrozonas del país, generamos tres gráficos por cada táctica agrupando por macrozona. Luego, mediante la función grid.arrange() unimos estos gráficos en una sola lámina.
g4 <- data %>% group_by(macrozona) %>%
count(pacifica) %>% mutate(prop = prop.table(n)) %>%
ggplot(aes(x = pacifica, y = prop, fill = macrozona, label = scales::percent(prop, accuracy = .1))) +
geom_bar(stat="identity", width=0.8, position = "dodge") +
geom_text(position = position_dodge2(width = .9),
vjust = 0.35,
hjust = -0.8,
size = 3) +
scale_fill_viridis_d(option = "viridis") +
theme_bw() + coord_flip(ylim =c(0,1)) + labs(title = 'Porcentaje de tácticas pacíficas según macrozona',
y = 'Porcentaje',
x = 'Tácticas pacíficas')+
labs(fill = "Macrozonas") +
theme(axis.title = element_text(), text = element_text(size = 12))
g5 <- data %>% group_by(macrozona) %>%
count(disruptiva) %>% mutate(prop = prop.table(n)) %>%
ggplot(aes(x = disruptiva, y = prop, fill = macrozona, label = scales::percent(prop, accuracy = .1))) +
geom_bar(stat="identity", width=0.8, position = "dodge") +
geom_text(position = position_dodge2(width = .9),
vjust = 0.35,
hjust = -0.8,
size = 3) +
scale_fill_viridis_d(option = "viridis") +
theme_bw() + coord_flip(ylim =c(0,1)) + labs(title = 'Porcentaje de tácticas disruptivas según macrozona',
y = 'Porcentaje',
x = 'Tácticas disruptivas')+
labs(fill = "Macrozonas") +
theme(axis.title = element_text(), text = element_text(size = 12))
g6 <- data %>% group_by(macrozona) %>%
count(violenta) %>% mutate(prop = prop.table(n)) %>%
ggplot(aes(x = violenta, y = prop, fill = macrozona, label = scales::percent(prop, accuracy = .1))) +
geom_bar(stat="identity", width=0.8, position = "dodge") +
geom_text(position = position_dodge2(width = .9),
vjust = 0.35,
hjust = -0.8,
size = 3) +
scale_fill_viridis_d(option = "viridis") +
theme_bw() + coord_flip(ylim =c(0,1)) + labs(title = 'Porcentaje de tácticas violentas según macrozona',
y = 'Porcentaje',
x = 'Tácticas violentas',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
labs(fill = "Macrozonas") +
theme(axis.title = element_text(), text = element_text(size = 12))
grid.arrange(g4, g5, g6, nrow = 3)3.3 Evolución de demandas
La base de datos del Observatorio registra las demandas (si es que las hay) presentes en cada acción contenciosa. En este documento operacionalizamos solo 4: educacion, indigena, laboral, y salud. Ahora graficaremos estas 4 demandas para conocer su distribución general durante los años.
Primero, generamos un data.frame aparte que contenga la cantidad de eventos por cada tipo de demanda para cada año. Esto implica que debamos quedarnos solo con los valores Sí de cada demanda mediante la función filter. Luego, unimos estos distintos data.frames en uno solo mediante la función rbind. Finalmente, graficamos agrupando las demandas para los años 2009 a 2019.
df_ed <- data %>% filter(educacion == "Sí") %>% group_by(ano) %>%
mutate(ano = as.numeric(ano)) %>% summarise(porcentaje = n()) %>% mutate(demanda = "educacion")
df_lab <- data %>% filter(laboral == "Sí") %>% group_by(ano) %>%
mutate(ano = as.numeric(ano)) %>% summarise(porcentaje = n()) %>%
mutate(demanda = "laboral")
df_sal <- data %>% filter(salud == "Sí") %>% group_by(ano) %>%
mutate(ano = as.numeric(ano)) %>% summarise(porcentaje = n()) %>%
mutate(demanda = "salud")
df_ind <- data %>% filter(indigena == "Sí") %>% group_by(ano) %>%
mutate(ano = as.numeric(ano)) %>% summarise(porcentaje = n()) %>%
mutate(demanda = "indigena")
df <- rbind(df_ed, df_lab, df_sal, df_ind)
g7 <- ggplot(df) +
aes(x = ano, y = porcentaje, colour = demanda) +
geom_line() +
geom_point() +
scale_x_continuous(breaks=seq(2009, 2019, 1)) +
scale_color_viridis_d(option = "viridis") +
labs(title = 'Evolución cantidad de acciones contenciosas por demanda',
y = 'Frecuencia de eventos',
x = 'Año',
colour = 'Demanda',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
geom_text(aes(label = porcentaje), vjust = -0.8,
position = position_dodge(width = .9),
size= 3)+
theme_bw()+
coord_cartesian(ylim=c(0,2000))+
theme(legend.position = 'top', axis.title = element_text(), text = element_text(size = 12))
g73.4 Presencia policial, heridos y muertos
La base de datos del observatorio también registra la presencia policial en los eventos de protesta, así como también la existencia de heridos y muertes en contexto de protesta. Para visualizar estos datos, primero haremos un gráfico con la evolución de la cantidad de acciones de protesta por cada año y la evolución de la presencia policial asociada. Luego, generaremos otro gráfico de barras para conocer la evolución de la cantidad de heridos y muertos por año. En ambos casos haremos data.frames respectivos para quedarnos solamente con las frecuencias de respuesta Sí en estas tres variables: policial, heridos, muertes.
3.4.1 Presencia policial y acciones contenciosas
df_pol <- data %>% group_by(ano) %>% filter(policial == "Sí") %>% summarise(porcentaje = n()) %>%
mutate(prop_poli = prop.table(porcentaje)) %>% select(ano, prop_poli) # nos quedamos con el porcentaje por año de presencia policial
df_n <- data %>% mutate(ano = as.factor(data$ano)) %>%
group_by(ano) %>%
summarise(porcentaje = n()) %>%
mutate(prop_n = prop.table(porcentaje)) %>% select(ano, prop_n) # nos quedamos con el porcentaje de eventos por año
df <- merge(df_pol, df_n, by = "ano") # unimos
g8 <- df %>% ggplot(aes(x = ano)) +
geom_col(aes(y = prop_n, label = as.character(scales::percent(prop_n, accuracy = .1)), fill = "#20A387FF")) +
geom_line(aes(y = prop_poli), stat = "identity", color = "black", size = 0.7) +
scale_x_continuous(breaks=seq(2009, 2019, 1)) +
geom_text(aes(label = (round(prop_n, 3)), x = ano, y = prop_n), vjust = -0.8,
position = position_dodge(width = .9),
size= 3) +
scale_y_continuous(labels = scales::percent) +
labs(title = 'Evolución acciones contenciosas y presencia policial',
y = 'Porcentaje',
x = 'Año',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
theme_bw() +
coord_cartesian(ylim=c(0,0.3)) +
theme(legend.position = 'top', axis.title = element_text(), text = element_text(size = 12))+
scale_fill_manual('', labels = 'Acciones contenciosas', values = "#20A387FF")
g83.4.2 Presencia de heridos y muertos
df_m <- data %>% group_by(ano) %>% filter(muertes == "Sí") %>% mutate(muertes = "Muertos") %>% select(ano, hm = muertes) # nos quedamos solo con la cantidad de muertes por año
df_h <- data %>% group_by(ano) %>% filter(heridos == "Sí") %>% mutate(heridos = "Heridos") %>% select(ano, hm = heridos) # nos quedamos solo con la cantidad de heridos por año
df_hm <- rbind(df_h, df_m) %>% count(hm) # unimos y calculamos frecuencias
g9 <- df_hm %>%
ggplot(aes(fill=hm, y= n, x=ano)) +
geom_bar(position="dodge", stat="identity")+
scale_x_continuous(breaks=seq(2009, 2019, 1)) +
labs(title = 'Evolución cantidad de heridos y muertos',
y = 'Frecuencia',
x = 'Año',
fill = '',
caption = 'Fuente: Elaboración propia en base a Observatorio de Conflictos 2009-2019')+
scale_fill_brewer(palette = "Paired") +
geom_text(aes(label = n), vjust = -0.8,
position = position_dodge(width = .9),
size= 3) +
theme_bw()+
coord_cartesian(ylim=c(0,350))+
theme(legend.position = 'bottom', axis.title = element_text(), text = element_text(size = 12))
g9